/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamananggaranbiayaunitnonrapatkerja;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.common.ClassSession;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.sadhar.sipp.plafon.PlafonDAO;
import org.sadhar.sipp.plafon.PlafonDAOImpl;
import org.sadhar.sipp.posbiaya.PosBiayaDAO;
import org.sadhar.sipp.posbiaya.PosBiayaDAOImpl;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Session;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zul.Button;
import org.zkoss.zul.Groupbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Window;

/**
 * 
 * @author Yohan Hardinugroho
 */
public class PerekamanAnggaranBiayaUnitNonRapatKerjaWnd extends ClassApplicationModule {

    private Label lblTahunAnggaran;
    private Radio rdAwal;
    private Radio rdRevisi;
    private Textbox txtboxTotalPlafon;
    private Textbox txtboxSisaPlafon;
    private Toolbarbutton toolbarbtnLihatRAB;
    private Textbox txtboxPosBiayaSearch;
    private Button btnCariPosBiaya;
    private Textbox txtboxIdPosBiaya;
    private Label lblPosBiaya;
    private Textbox txtboxJenisSearch;
    private Button btnCariJenis;
    private Textbox txtboxIdJenis;
    private Textbox txtboxItemBiayaSearch;
    private Button btnCariItemBiaya;
    private Textbox txtboxIdItemBiaya;
    private Textbox txtboxItemBiaya;
    private Textbox txtboxHarga;
    private Label lblSatuan;
    private Textbox txtboxKuantitas;
    private Textbox txtboxTotalBiaya;
    private Button btnSimpan;
    private Button btnBatal;
    private Textbox txtboxSubItemSearch;
    private Button btnCariSubItem;
    private Label lblSubitem;
    private Button btnKirim;
    private PerekamanAnggaranBiayaUnitNonRapatKerjaDAO perekamanAnggaranBiayaUnitNonRapatKerjaDAO;
    private PlafonDAO plafonDAO;
    private PosBiayaDAO posBiayaDAO;
    private ClassSession session;//03001040
    private boolean isSudahKirim = false;
    private DecimalFormat decimalFormat = new DecimalFormat("#,##0.0");
    private Textbox txtboxNamaTableItemPosBiaya;
    private Textbox txtboxNamaTableSubItemPosBiaya;
    private Textbox txtboxIdSubItem;
    private Groupbox groupboxDaftarBiaya;
    private Groupbox grbboxSubItem;
    private boolean isDikunci;
    private Session sesi;

    public void onCreate() throws Exception {
        sesi = Sessions.getCurrent();
        session = (ClassSession) sesi.getAttribute("CURRENT_SESSION");
        lblTahunAnggaran = (Label) getFellow("lblTahunAnggaran");
        rdAwal = (Radio) getFellow("rdAwal");
        rdRevisi = (Radio) getFellow("rdRevisi");
        txtboxTotalPlafon = (Textbox) getFellow("txtboxTotalPlafon");
        txtboxSisaPlafon = (Textbox) getFellow("txtboxSisaPlafon");
        toolbarbtnLihatRAB = (Toolbarbutton) getFellow("toolbarbtnLihatRAB");

        txtboxPosBiayaSearch = (Textbox) getFellow("txtboxPosBiayaSearch");
        btnCariPosBiaya = (Button) getFellow("btnCariPosBiaya");
        txtboxIdPosBiaya = (Textbox) getFellow("txtboxIdPosBiaya");
        txtboxIdPosBiaya.setValue("-1");
        lblPosBiaya = (Label) getFellow("lblPosBiaya");
        txtboxNamaTableItemPosBiaya = (Textbox) getFellow("txtboxNamaTableItemPosBiaya");
        txtboxNamaTableSubItemPosBiaya = (Textbox) getFellow("txtboxNamaTableSubItemPosBiaya");
        txtboxJenisSearch = (Textbox) getFellow("txtboxJenisSearch");
        btnCariJenis = (Button) getFellow("btnCariJenis");
        txtboxIdJenis = (Textbox) getFellow("txtboxIdJenis");
        txtboxItemBiayaSearch = (Textbox) getFellow("txtboxItemBiayaSearch");
        btnCariItemBiaya = (Button) getFellow("btnCariItemBiaya");
        txtboxIdItemBiaya = (Textbox) getFellow("txtboxIdItemBiaya");
        txtboxItemBiaya = (Textbox) getFellow("txtboxItemBiaya");
        txtboxHarga = (Textbox) getFellow("txtboxHarga");
        lblSatuan = (Label) getFellow("lblSatuan");
        txtboxKuantitas = (Textbox) getFellow("txtboxKuantitas");

        txtboxTotalBiaya = (Textbox) getFellow("txtboxTotalBiaya");
        btnSimpan = (Button) getFellow("btnSimpan");
        btnBatal = (Button) getFellow("btnBatal");

        txtboxSubItemSearch = (Textbox) getFellow("txtboxSubItemSearch");
        btnCariSubItem = (Button) getFellow("btnCariSubItem");
        lblSubitem = (Label) getFellow("lblSubitem");

        txtboxIdSubItem = (Textbox) getFellow("txtboxIdSubItem");
        grbboxSubItem = (Groupbox) getFellow("grbboxSubItem");
        btnKirim = (Button) getFellow("btnKirim");
        groupboxDaftarBiaya = (Groupbox) getFellow("groupboxDaftarBiaya");

        perekamanAnggaranBiayaUnitNonRapatKerjaDAO = new PerekamanAnggaranBiayaUnitNonRapatKerjaDAOImpl();
        plafonDAO = new PlafonDAOImpl();
        posBiayaDAO = new PosBiayaDAOImpl();
        readyState();
        clear();
        setStatusPengajuan();
        load();
        setDikunci();
    }

    public void readyState() {
    }

    //Modified by --kris--
    public void clear() throws Exception {
        txtboxJenisSearch.setValue("");
        txtboxIdJenis.setValue("-1");
        txtboxItemBiayaSearch.setValue("");
        txtboxItemBiaya.setValue("");
        txtboxIdItemBiaya.setValue("-1");
        txtboxHarga.setValue("");
        lblSatuan.setValue("");
        txtboxKuantitas.setValue("");
        txtboxTotalBiaya.setValue("");
    }

    public void setDikunci() throws Exception {
        String isRevisi = "N";
        if (rdAwal.isChecked()) {
            isRevisi = "N";
        } else {
            isRevisi = "Y";
        }
        String dikunci = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.selectIsDikunci(session.getThnAnggaran(), session.getKodeUnit(), isRevisi);
        if (dikunci.equalsIgnoreCase("Y")) {
            btnSimpan.setDisabled(true);
            btnKirim.setDisabled(true);
            isDikunci = true;
        } else {
            btnSimpan.setDisabled(false);
            btnKirim.setDisabled(false);
            isDikunci = false;
        }
        this.showDetails();
    }

    public void setStatusPengajuan() throws Exception {
        String tahun = session.getThnAnggaran();
        String kodeUnit = session.getKodeUnit();
        lblTahunAnggaran.setValue(tahun);
        List<Map> lmap = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listStatusPengajuan(tahun, kodeUnit);

        if (lmap.size() <= 0) {
            rdAwal.setSelected(true);
            rdRevisi.setSelected(false);
        } else {
            boolean isRevisi = false;
            boolean isSudahDiajukan = false;
            for (Map m : lmap) {
                if (!isRevisi && ClassAntiNull.AntiNullString(m.get("isRevisi")).trim().equalsIgnoreCase("N")) {
                    isRevisi = true;
                }
                if (!isSudahDiajukan && ClassAntiNull.AntiNullString(
                        m.get("isSudahDiajukan")).trim().equalsIgnoreCase("Y")) {
                    isSudahDiajukan = true;
                }
            }
            if (isSudahDiajukan) {
                rdAwal.setSelected(false);
                rdRevisi.setSelected(true);
            } else {
                rdAwal.setSelected(true);
                rdRevisi.setSelected(false);
            }
        }
    }

    public void load() throws Exception {
        // lblTahunAnggaran.setValue(ClassSession.getInstance().getTahunAkademik());
        String tahun = session.getThnAnggaran();
        String kodeUnit = session.getKodeUnit();
        lblTahunAnggaran.setValue(tahun);
        isDikunci = false;

        double totalPlafon = 0.0d;

        List<Map> lplafon = plafonDAO.listPlafon(tahun, kodeUnit, 1);
        for (Map m : lplafon) {
            DecimalFormat df = new DecimalFormat("##,##0.0");
            totalPlafon = ClassAntiNull.AntiNullDouble(m.get("totalPlafon"));
            txtboxTotalPlafon.setValue(df.format(totalPlafon));
        }

        double totalAnggaranNonRapat = 0.0d;
        List<Map> lmap = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listStatusPengajuan(tahun, kodeUnit);

        if (lmap.size() == 0) {
            totalAnggaranNonRapat = 0.0d;
        } else {
            List<Map> lMap2 = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listStatusPengajuan2(tahun, kodeUnit, "Y", "Y");
            if (lMap2.size() > 0) {
                totalAnggaranNonRapat = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "Y", "Y");
            } else {
                List<Map> lMap3 = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listStatusPengajuan2(tahun, kodeUnit, "Y", "N");
                if (lMap3.size() > 0) {
                    totalAnggaranNonRapat = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "Y", "N");
                } else {
                    List<Map> lMap4 = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listStatusPengajuan2(tahun, kodeUnit, "N", "Y");
                    if (lMap4.size() > 0) {
                        totalAnggaranNonRapat = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "N", "Y");
                    } else {
                        List<Map> lMap5 = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listStatusPengajuan2(tahun, kodeUnit, "N", "N");
                        if (lMap5.size() > 0) {
                            totalAnggaranNonRapat = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "N", "N");
                        } else {
                            totalAnggaranNonRapat = 0;
                        }
                    }
                }
            }
//            for (Map m : lmap) {
//                String isRevisi = ClassAntiNull.AntiNullString(m.get("isRevisi"));
//                String isSudahDiajukan = ClassAntiNull.AntiNullString(m.get("isSudahDiajukan"));
//                if (isRevisi.equalsIgnoreCase("Y") && isSudahDiajukan.equalsIgnoreCase("Y")) {
//
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("Y") && isSudahDiajukan.equalsIgnoreCase("N")) {
//                    totalAnggaranNonRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "Y", "N");
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("N") && isSudahDiajukan.equalsIgnoreCase("Y")) {
//                    totalAnggaranNonRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "N", "Y");
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("N") && isSudahDiajukan.equalsIgnoreCase("N")) {
//                    totalAnggaranNonRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranNonRapat(tahun, kodeUnit, "N", "N");
//                    break;
//                }
//            }

        }

        List<Map> listAnggaranRapat = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listAnggaranBiayaRapatKerja("Y", tahun, kodeUnit);


        double totalAnggaranRapat = 0.0d;
        if (listAnggaranRapat.size() == 0) {
            totalAnggaranRapat = 0.0d;
        } else {
            List<Map> lMap2 = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listAnggaranBiayaRapatKerja2("Y", tahun, kodeUnit, "Y", "Y");
            if (lMap2.size() > 0) {
                totalAnggaranRapat = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "Y", "Y");
            } else {
                List<Map> lMap3 = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listAnggaranBiayaRapatKerja2("Y", tahun, kodeUnit, "Y", "N");
                if (lMap3.size() > 0) {
                    totalAnggaranRapat = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "Y", "N");
                } else {
                    List<Map> lMap4 = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listAnggaranBiayaRapatKerja2("Y", tahun, kodeUnit, "N", "Y");
                    if (lMap4.size() > 0) {
                        totalAnggaranRapat = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "N", "Y");
                    } else {
                        List<Map> lMap5 = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listAnggaranBiayaRapatKerja2("Y", tahun, kodeUnit, "N", "N");
                        if (lMap5.size() > 0) {
                            totalAnggaranRapat = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "N", "N");
                        } else {
                            totalAnggaranRapat = 0;
                        }
                    }
                }
            }
//
//            for (Map m : lmap) {
//                String isRevisi = ClassAntiNull.AntiNullString(m.get("isRevisi"));
//                String isSudahDiajukan = ClassAntiNull.AntiNullString(m.get("isSudahDiajukan"));
//                if (isRevisi.equalsIgnoreCase("Y") && isSudahDiajukan.equalsIgnoreCase("Y")) {
//                    totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "Y", "Y");
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("Y") && isSudahDiajukan.equalsIgnoreCase("N")) {
//                    totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "Y", "N");
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("N") && isSudahDiajukan.equalsIgnoreCase("Y")) {
//                    totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "N", "Y");
//                    break;
//                } else if (isRevisi.equalsIgnoreCase("N") && isSudahDiajukan.equalsIgnoreCase("N")) {
//                    totalAnggaranRapat = perekamanAnggaranBiayaRapatKerjaDAO.totalAnggaranRapat(tahun, kodeUnit, "N", "N");
//                    break;
//                }
//            }

        }


        double sisaPlafon = totalPlafon - totalAnggaranNonRapat - totalAnggaranRapat;
        txtboxSisaPlafon.setValue(decimalFormat.format(sisaPlafon));


    }

    public void btnCariPosBiayaOnClick() throws Exception {
        Window windows = (Window) Executions.createComponents("/sippzul/perekamananggaranbiayaunitnonrapatkerja/PopupPosBiaya.zul", this, null);
        Listbox lstboxPosBiaya = (Listbox) windows.getFellow("lstboxPosBiaya");
        String tahunKelompok = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.tahunKelompokAnggaranYangDigunakan(lblTahunAnggaran.getValue());

        List<Map> lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listKelompokBiaya(tahunKelompok, txtboxPosBiayaSearch.getValue());
        lstboxPosBiaya.getItems().clear();
        int index = 1;
        for (Map m : lm) {
            Listitem item = new Listitem();
            item.setValue(m);

            if (ClassAntiNull.AntiNullString(m.get("isUmum")).equalsIgnoreCase("Y")) {
                item.appendChild(new Listcell("" + (index++)));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaPosBiaya"))));
                lstboxPosBiaya.appendChild(item);
            } else {

                List<Map> ceks = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.cekPosBiayaKhususUnit(ClassAntiNull.AntiNullInt(m.get("kodeKelompokBiaya")), session.getKodeUnit());
                if (ceks.size() > 0) {
                    item.appendChild(new Listcell("" + (index++)));
                    item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaPosBiaya"))));
                    lstboxPosBiaya.appendChild(item);
                }
            }

        }


        windows.doModal();
        txtboxPosBiayaSearch.setValue("");
        clear();
        setStatusFromPosBiaya();
        setStatusSubItemBiaya();
        showDetails();
    }

    public void setStatusFromPosBiaya() throws Exception {
        String namaTabelItem = txtboxNamaTableItemPosBiaya.getValue();
        if (namaTabelItem.equalsIgnoreCase("itemBiaya")) {
            btnCariJenis.setDisabled(true);
            txtboxJenisSearch.setDisabled(true);
        } else if (namaTabelItem.equalsIgnoreCase("barang")) {
            btnCariJenis.setDisabled(false);
            txtboxJenisSearch.setDisabled(false);
        } else {
            Messagebox.show("Inputan Salah", "Pesan Kesalahan", Messagebox.OK, null);
            btnCariPosBiaya.setFocus(true);
            btnCariJenis.setDisabled(false);
            txtboxJenisSearch.setDisabled(false);
        }
    }

    public void setStatusSubItemBiaya() {
        String namaTabelSubItem = txtboxNamaTableSubItemPosBiaya.getValue();

        if (namaTabelSubItem.trim().isEmpty()) {
            grbboxSubItem.setVisible(false);

        } else {
            grbboxSubItem.setVisible(true);
        }
    }

    public void btnCariSubItemOnClick() throws Exception {
        Window windows = (Window) Executions.createComponents("/sippzul/perekamananggaranbiayaunitnonrapatkerja/PopupKendaraan.zul", this, null);
        Listbox lstboxKendaraan = (Listbox) windows.getFellow("lstboxKendaraan");

        List<Map> listM = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listKendaraanBarangInvenstasi(txtboxSubItemSearch.getValue());
        int index = 1;
        for (Map m : listM) {
            Listitem item = new Listitem();
            item.setValue(m);
            item.appendChild(new Listcell("" + (index++)));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("noSTNK"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaMerkBarangInvestasi"))));
            item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("type"))));
            lstboxKendaraan.appendChild(item);
        }
        windows.doModal();
        txtboxSubItemSearch.setValue("");
    }

    public void btnCariItemBiayaOnClick() throws Exception {
        Window windows = (Window) Executions.createComponents("/sippzul/perekamananggaranbiayaunitnonrapatkerja/PopupItemBiaya.zul", this, null);
        Listbox lstboxItemBiaya = (Listbox) windows.getFellow("lstboxItemBiaya");

        String namaTabelItem = txtboxNamaTableItemPosBiaya.getValue();
        if (namaTabelItem.equalsIgnoreCase("itemBiaya")) {

            List<Map> lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listNamaItemFromItemBiaya(Integer.parseInt(txtboxIdPosBiaya.getValue()));
            int index = 1;
            for (Map m : lm) {
                Listitem item = new Listitem();
                item.setValue(m);
                item.appendChild(new Listcell("" + (index++)));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaItem"))));
                lstboxItemBiaya.appendChild(item);
            }
            windows.doModal();

            List<Map> listDetails = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailFromItemBiaya(lblTahunAnggaran.getValue(), ClassAntiNull.AntiNullInt(txtboxIdItemBiaya.getValue()));
            for (Map m : listDetails) {
                txtboxItemBiaya.setValue(ClassAntiNull.AntiNullString(m.get("namaItem")));
                txtboxItemBiaya.setDisabled(true);
                lblSatuan.setValue(ClassAntiNull.AntiNullString(m.get("satuan")));

                double harga = ClassAntiNull.AntiNullDouble(m.get("harga"));
                if (harga > 0) {
                    txtboxHarga.setValue(decimalFormat.format(harga));
                    txtboxHarga.setDisabled(true);
                } else {
                    txtboxHarga.setValue("" + harga);
                    txtboxHarga.setDisabled(false);
                }

            }
        } else if (namaTabelItem.equalsIgnoreCase("barang")) {
            List<Map> lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailBarang(Integer.parseInt(txtboxIdJenis.getValue()), txtboxItemBiayaSearch.getValue());
            int index = 1;
            for (Map m : lm) {
                Listitem item = new Listitem();
                item.setValue(m);
                item.appendChild(new Listcell("" + (index++)));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("namaBarang"))));
                lstboxItemBiaya.appendChild(item);
            }
            windows.doModal();

            List<Map> lmx = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listHargaBarang(lblTahunAnggaran.getValue(), Integer.parseInt(txtboxIdItemBiaya.getValue()));
            for (Map m : lmx) {
                double harga = ClassAntiNull.AntiNullDouble(m.get("hargaBeliSatuanPerKecil"));
                txtboxHarga.setValue(decimalFormat.format(harga));
            }

        } else {
            Messagebox.show("namaTabelItem Kosong", "Pesan Kesalahan", Messagebox.OK, null);
            btnCariPosBiaya.setFocus(true);
            btnCariJenis.setDisabled(false);
            txtboxJenisSearch.setDisabled(false);
        }
//        txtboxItemBiayaSearch.setValue("");

        txtboxKuantitas.setValue("");
        txtboxTotalBiaya.setValue("");

    }

    public void txtboxKuantitasOnBlur() throws Exception {
        double harga = 0;
        double kuantitas = 0;
        try {
            Number nmb = decimalFormat.parse(txtboxHarga.getValue());
            if (nmb instanceof Double) {
                harga = nmb.doubleValue();
            } else if (nmb instanceof Long) {
                harga = 0.0 + nmb.longValue();
            }
            kuantitas = Double.parseDouble(txtboxKuantitas.getValue());
        } catch (WrongValueException wrongValueException) {
            System.out.println("error");
        } catch (NumberFormatException numberFormatException) {
            System.out.println("erroxxx");
        }
        double total = harga * kuantitas;

        txtboxTotalBiaya.setValue(decimalFormat.format(total));
        txtboxTotalBiaya.setDisabled(true);
    }

    public void btnCariJenisOnClick() throws Exception {
        Window windows = (Window) Executions.createComponents("/sippzul/perekamananggaranbiayaunitnonrapatkerja/PopupJenisBarang.zul", this, null);
        Listbox lstboxJenisBarang = (Listbox) windows.getFellow("lstboxJenisBarang");
        String namaTabelItem = txtboxNamaTableItemPosBiaya.getValue();

        if (namaTabelItem.equalsIgnoreCase("itemBiaya")) {
        } else if (namaTabelItem.equalsIgnoreCase("barang")) {
            List<Map> listMap = new ArrayList<Map>();
            if (txtboxIdPosBiaya.getValue().equalsIgnoreCase("1")) {
                listMap = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailJenisBarang(1, txtboxJenisSearch.getValue());
            } else if (txtboxIdPosBiaya.getValue().equalsIgnoreCase("3")) {
                listMap = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailJenisBarang(3, txtboxJenisSearch.getValue());
            } else if (txtboxIdPosBiaya.getValue().equalsIgnoreCase("4")) {
                listMap = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailJenisBarang(2, txtboxJenisSearch.getValue());
            } else {
            }

            int index = 1;
            for (Map m : listMap) {
                Listitem item = new Listitem();
                item.setValue(m);
                item.appendChild(new Listcell("" + (index++)));
                item.appendChild(new Listcell(ClassAntiNull.AntiNullString(m.get("jenisBarang"))));
                lstboxJenisBarang.appendChild(item);
            }
        } else {
        }

        windows.doModal();
//        txtboxJenisSearch.setValue("");
    }

    public void btnSimpanOnClick() throws Exception {

        String tahun = lblTahunAnggaran.getValue();
        String kodeUnit = session.getKodeUnit();
        if (txtboxIdPosBiaya.getValue().trim().isEmpty()) {
            //Warning=========
            Messagebox.show("Id Pos Biaya Kosong", "Pesan Kesalahan", Messagebox.OK, null);
            return;
        }
        int kodePosBiaya = Integer.parseInt(txtboxIdPosBiaya.getValue());

        if (txtboxIdItemBiaya.getValue().trim().isEmpty()) {
            //Warning=========
            Messagebox.show("Item biaya Kosong", "Pesan Kesalahan", Messagebox.OK, null);
            return;
        }
        int kodeItemBiayaBarang = Integer.parseInt(txtboxIdItemBiaya.getValue());

        if (txtboxHarga.getValue().trim().isEmpty()) {
            //Warning=========
            Messagebox.show("Harga Kosong", "Pesan Kesalahan", Messagebox.OK, null);
            return;
        }
        Number nbm = decimalFormat.parse(txtboxHarga.getValue());
        double harga = 0;
        if (nbm instanceof Double) {
            harga = nbm.doubleValue();
        } else if (nbm instanceof Long) {
            harga = 0.0 + nbm.longValue();
        }
        if (txtboxKuantitas.getValue().trim().isEmpty()) {
            //Warning=========
            Messagebox.show("Kuantitas Kosong", "Pesan Kesalahan", Messagebox.OK, null);
            return;
        }
        int kuantitas = Integer.parseInt(txtboxKuantitas.getValue());
        String isRevisi = rdAwal.isChecked() ? "N" : "Y";
        int kodeSubItemBiayaBarang;
        if (txtboxIdSubItem.getValue().trim().isEmpty()) {
            kodeSubItemBiayaBarang = -1;
        } else {
            kodeSubItemBiayaBarang = Integer.parseInt(txtboxIdSubItem.getValue());
        }


        showDetails();
        double totalBiaya;
        double sisaPlafon;
        try {
            totalBiaya = decimalFormat.parse(txtboxTotalBiaya.getValue()).doubleValue();
            sisaPlafon = decimalFormat.parse(txtboxSisaPlafon.getValue()).doubleValue();
        } catch (Exception ex) {
            ex.printStackTrace();
            totalBiaya = 0;
            sisaPlafon = 0;
        }
        if (totalBiaya > 0 && sisaPlafon - totalBiaya > 0) {
            int cek = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.cek(tahun, kodeUnit, kodePosBiaya, kodeItemBiayaBarang, isRevisi);
            if (cek == 0) {
                perekamanAnggaranBiayaUnitNonRapatKerjaDAO.insert(tahun, kodeUnit, kodePosBiaya, kodeItemBiayaBarang, harga, kuantitas, isRevisi, "N", kodeSubItemBiayaBarang);
            } else {
                //Warning=========
                Messagebox.show("Data telah ada, Proses penyimpanan dibatalkan", "Pesan Kesalahan", Messagebox.OK, null);
                return;
            }
            Messagebox.show("Proses penyimpanan berhasil", "Pesan Informasi", Messagebox.OK, null);
            load();
            setDikunci();
            clear();
        } else {
            Messagebox.show("Dana Tidak Mencukupi, Proses Penyimpanan dibatalkan", "Pesan Kesalahan", Messagebox.OK, null);
            return;
        }

    }

    public void btnBatalOnClick() throws Exception {
        clear();
    }

    public void btnKirimOnClick() throws Exception {
        if (rdAwal.isChecked()) {
            List<Map> listAnggaran = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listAnggaranBiayaRapatKerjaForButtonKirim("Y", lblTahunAnggaran.getValue(), session.getKodeUnit(), "N", "N");
            if (listAnggaran.size() == 0) {
                Messagebox.show("Anggaran Rapat Kerja belum disusun", "Pesan Kesalahan", Messagebox.OK, null);
                return;
            } else {
                perekamanAnggaranBiayaUnitNonRapatKerjaDAO.updateIsDiajukan(lblTahunAnggaran.getValue(), session.getKodeUnit());
                int count = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.cekKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());

                if (count == 0) {
                    perekamanAnggaranBiayaUnitNonRapatKerjaDAO.insertKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());
                } else {
                    perekamanAnggaranBiayaUnitNonRapatKerjaDAO.updateKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());
                }
            }
        } else {
            List<Map> listAnggaran = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listAnggaranBiayaRapatKerjaForButtonKirim("Y", lblTahunAnggaran.getValue(), session.getKodeUnit(), "Y", "N");
            if (listAnggaran.size() == 0) {
                Messagebox.show("Anggaran Rapat Kerja belum disusun", "Pesan Kesalahan", Messagebox.OK, null);
                return;
            } else {
                perekamanAnggaranBiayaUnitNonRapatKerjaDAO.updateIsDiajukan(lblTahunAnggaran.getValue(), session.getKodeUnit());
                int count = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.cekKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());

                if (count == 0) {
                    perekamanAnggaranBiayaUnitNonRapatKerjaDAO.insertKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());
                } else {
                    perekamanAnggaranBiayaUnitNonRapatKerjaDAO.updateKunciAnggaranBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit());
                }
            }
        }

        isSudahKirim = true;
        Messagebox.show("Data telah berhasil di Kirim", "Pesan Informasi", Messagebox.OK, null);
        setDikunci();
        clear();
    }

    private DaftarBiayaGroupbox createGroupbox(String id) {
        Map<String, String> m = new HashMap<String, String>();
        m.put("id", id);
        DaftarBiayaGroupbox gb = (DaftarBiayaGroupbox) Executions.createComponents("/sippzul/perekamananggaranbiayaunitnonrapatkerja/DaftarBiayaGroupbox.zul", this, m);
        gb.initializeChildren();
        return gb;
    }

    private DaftarBiayaKendaraanGroupbox createKendaraanGroupbox(String id) {
        Map<String, String> m = new HashMap<String, String>();
        m.put("id", id);
        DaftarBiayaKendaraanGroupbox gb = (DaftarBiayaKendaraanGroupbox) Executions.createComponents("/sippzul/perekamananggaranbiayaunitnonrapatkerja/DaftarBiayaKendaraanGroupbox.zul", this, m);
        gb.initializeChildren();
        return gb;
    }

    public void showDetails() throws Exception {
        boolean statusPengajuanAwal = rdAwal.isChecked();
        boolean groupboxVisibility = grbboxSubItem.isVisible();
        groupboxDaftarBiaya.getChildren().clear();
        if (statusPengajuanAwal && !groupboxVisibility) {
            String namaTabelItem = txtboxNamaTableItemPosBiaya.getValue();
            if (namaTabelItem.equalsIgnoreCase("itemBiaya")) {
                DaftarBiayaGroupbox gdw = createGroupbox(txtboxIdPosBiaya.getValue());
                gdw.setFroms(this);
                groupboxDaftarBiaya.appendChild(gdw);
                gdw.setRevisiOrNot("");
                gdw.setKunci(isDikunci);
                gdw.setNamaPosBiaya(lblPosBiaya.getValue());
                List<Map> lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailsIfItemBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit(), Integer.parseInt(txtboxIdPosBiaya.getValue()));
                gdw.setListboxItems(lm);
            } else if (namaTabelItem.equalsIgnoreCase("barang")) {
                DaftarBiayaGroupbox gdw = createGroupbox(txtboxIdPosBiaya.getValue());
                gdw.setFroms(this);
                groupboxDaftarBiaya.appendChild(gdw);
                gdw.setRevisiOrNot("");
                gdw.setKunci(isDikunci);
                gdw.setNamaPosBiaya(lblPosBiaya.getValue());
                List<Map> lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailsIfBarang(lblTahunAnggaran.getValue(), session.getKodeUnit(), Integer.parseInt(txtboxIdPosBiaya.getValue()));
                gdw.setListboxItems(lm);
            } else {
//                Messagebox.show("namaTabelIt width="100px"em Kosong", "Pesan Kesalahan", Messagebox.OK, null);
                btnCariPosBiaya.setFocus(true);
                btnCariJenis.setDisabled(false);
                txtboxJenisSearch.setDisabled(false);
            }
        } else if (!statusPengajuanAwal && !groupboxVisibility) {
            String namaTabelItem = txtboxNamaTableItemPosBiaya.getValue();
            if (namaTabelItem.equalsIgnoreCase("itemBiaya")) {

                DaftarBiayaGroupbox gdw = createGroupbox(txtboxIdPosBiaya.getValue() + "Rev");
                gdw.setFroms(this);
                groupboxDaftarBiaya.appendChild(gdw);
                gdw.setNamaPosBiaya(lblPosBiaya.getValue());
                gdw.setKunci(isDikunci);
                gdw.setRevisiOrNot("[Revisi]");
                List<Map> lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailsIfItemBiayaRev(lblTahunAnggaran.getValue(), session.getKodeUnit(), Integer.parseInt(txtboxIdPosBiaya.getValue()));
                gdw.setListboxItems(lm);

                DaftarBiayaGroupbox gdw2 = createGroupbox(txtboxIdPosBiaya.getValue());
                gdw2.setFroms(this);
                groupboxDaftarBiaya.appendChild(gdw2);
                gdw2.setNamaPosBiaya(lblPosBiaya.getValue());
                gdw2.setKunci(isDikunci);
                gdw2.setRevisiOrNot("[Awal]");
                lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailsIfItemBiaya(lblTahunAnggaran.getValue(), session.getKodeUnit(), Integer.parseInt(txtboxIdPosBiaya.getValue()));
                gdw2.setListboxItems(lm);
            } else if (namaTabelItem.equalsIgnoreCase("barang")) {
                DaftarBiayaGroupbox gdw = createGroupbox(txtboxIdPosBiaya.getValue() + "Rev");
                gdw.setFroms(this);
                groupboxDaftarBiaya.appendChild(gdw);
                gdw.setKunci(isDikunci);
                gdw.setRevisiOrNot("[Revisi]");
                gdw.setNamaPosBiaya(lblPosBiaya.getValue());
                List<Map> lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailsIfBarangRev(lblTahunAnggaran.getValue(), session.getKodeUnit(), Integer.parseInt(txtboxIdPosBiaya.getValue()));
                gdw.setListboxItems(lm);


                DaftarBiayaGroupbox gdw2 = createGroupbox(txtboxIdPosBiaya.getValue());
                gdw2.setFroms(this);
                groupboxDaftarBiaya.appendChild(gdw2);
                gdw.setKunci(isDikunci);
                gdw2.setRevisiOrNot("[Awal]");
                gdw2.setNamaPosBiaya(lblPosBiaya.getValue());
                lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailsIfBarang(lblTahunAnggaran.getValue(), session.getKodeUnit(), Integer.parseInt(txtboxIdPosBiaya.getValue()));
                gdw2.setListboxItems(lm);
            } else {
//                Messagebox.show("namaTabelItem Kosong", "Pesan Kesalahan", Messagebox.OK, null);
                btnCariPosBiaya.setFocus(true);
                btnCariJenis.setDisabled(false);
                txtboxJenisSearch.setDisabled(false);
            }
        } else if (statusPengajuanAwal && groupboxVisibility) {
            DaftarBiayaKendaraanGroupbox dbkg = createKendaraanGroupbox(txtboxIdPosBiaya.getValue());
            dbkg.setFroms(this);
            groupboxDaftarBiaya.appendChild(dbkg);
            dbkg.setKunci(isDikunci);
            dbkg.setRevisiOrNot("");
            dbkg.setNamaPosBiaya(lblPosBiaya.getValue());
            List<Map> lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailsKendaraan(lblTahunAnggaran.getValue(), session.getKodeUnit(), Integer.parseInt(txtboxIdPosBiaya.getValue()));
            dbkg.setListboxItems(lm);

        } else if (!statusPengajuanAwal && groupboxVisibility) {
            DaftarBiayaKendaraanGroupbox dbkg = createKendaraanGroupbox(txtboxIdPosBiaya.getValue() + "Rev");
            dbkg.setFroms(this);
            groupboxDaftarBiaya.appendChild(dbkg);
            dbkg.setKunci(isDikunci);
            dbkg.setRevisiOrNot("[Revisi]");
            dbkg.setNamaPosBiaya(lblPosBiaya.getValue());
            List<Map> lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailsKendaraanRev(lblTahunAnggaran.getValue(), session.getKodeUnit(), Integer.parseInt(txtboxIdPosBiaya.getValue()));
            dbkg.setListboxItems(lm);

            DaftarBiayaKendaraanGroupbox dbkg2 = createKendaraanGroupbox(txtboxIdPosBiaya.getValue());
            dbkg2.setFroms(this);
            groupboxDaftarBiaya.appendChild(dbkg2);
            dbkg2.setKunci(isDikunci);
            dbkg2.setRevisiOrNot("[Awal]");
            dbkg2.setNamaPosBiaya(lblPosBiaya.getValue());
            lm = perekamanAnggaranBiayaUnitNonRapatKerjaDAO.listDetailsKendaraan(lblTahunAnggaran.getValue(), session.getKodeUnit(), Integer.parseInt(txtboxIdPosBiaya.getValue()));
            dbkg2.setListboxItems(lm);
        }
    }
}
